# CMakeLists.txt 组织了 DangalDB 的项目依赖与构建流程
# DangalDB Community

CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
PROJECT(DangalDB)

INCLUDE(GNUInstallDirs)

SET(CMAKE_CXX_STANDARD 20)

# 导入 DangalDB 所需要的一些外部库
# 这里，我们使用 ExternalProject 命令而不是 FetchContent 命令
# 这是因为 RocksDB 本身是一个依赖于多个外部库的庞大项目
# 使用 ExternalProject 命令可以做到编译过程分离，进而帮助我们优化流程
INCLUDE(ExternalProject)

# 设置将外部库下载以后，存储在本地的位置

SET(RELATIVE_PATH ${PROJECT_SOURCE_DIR})
SET(ABSOLUTE_PATH ${PROJECT_SOURCE_DIR})

SET(BUILD_SUPPORT_DIR ${PROJECT_SOURCE_DIR}/extern_module)

## RocksDB 为 DangalDB 提供了单节点 KV 存储的能力

INCLUDE(extern_module/RocksDB/lz4.cmake)
INCLUDE(extern_module/RocksDB/zlib.cmake)
INCLUDE(extern_module/RocksDB/bzip2.cmake)
INCLUDE(extern_module/RocksDB/zstandard.cmake)
INCLUDE(extern_module/RocksDB/snappy.cmake)
INCLUDE(extern_module/RocksDB/gflags.cmake)
INCLUDE(extern_module/RocksDB/rocksdb.cmake)
INCLUDE(extern_module/NuRaft/nuraft.cmake)
